package cc.cc4414.cc02.system.service;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.transaction.annotation.Transactional;

import cc.cc4414.cc02.system.entity.Role;
import cc.cc4414.cc02.system.entity.User;

/**
 * @author cc 2018年4月22日
 */
public interface UserService {
	/**
	 * 新增用户
	 * 
	 * @param user
	 *            用户
	 */
	void save(User user);

	/**
	 * 通过用户名查询用户
	 * 
	 * @param username
	 *            用户名
	 * @return 查询到的用户
	 */
	User findByUsername(String username);

	/**
	 * 修改密码
	 * 
	 * @param id
	 *            用户id
	 * @param password
	 *            新密码
	 */
	void updatePassword(Long id, String password);

	/**
	 * 分页查询
	 * 
	 * @param page
	 *            当前页数，从0开始计算
	 * @param size
	 *            每页行数
	 * @return 用户分页信息
	 */
	Page<User> findAll(int page, int size);

	/**
	 * 通过用户id删除用户(将state设置为1)
	 * 
	 * @param userId
	 *            用户id
	 */
	@Transactional
	void delete(Long userId);

	/**
	 * 重置密码
	 * 
	 * @param userId
	 *            用户id
	 */
	void resetPassword(Long userId);

	/**
	 * 修改用户
	 * 
	 * @param user
	 *            用户
	 */
	void update(User user);

	/**
	 * 通过用户id查找该用户拥有的角色
	 * 
	 * @param userId
	 *            用户id
	 * @return 该用户拥有的角色
	 */
	List<Role> findRoleByUserId(Long userId);

	/**
	 * 修改用户所拥有的所有角色
	 * 
	 * @param userId
	 *            用户id
	 * @param roleIds
	 *            用户所拥有的角色id
	 */
	@Transactional
	void updateUserRole(Long userId, Long[] roleIds);
}
